/**
 * Created with IntelliJ IDEA
 * Description:
 * User: SEKI TOMOKI
 * Date: 2023-09-26
 * Time: 12:04
 */
class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0;
        int j = nums.length - 1;

        if((nums.length == 1 && val == nums[0]) || nums.length == 0) {
            return 0;
        }
        //需要加上等于号，因为需要考虑当i于j相同时该位置的元素是否与val相同
        while(i <= j) {
            if(nums[i] != val) {
                i++;
            }
            if(nums[j] == val) {
                j--;
            }
            //需要再次加上i <= j的条件，因为此时可能 j < i了，
            //把i <= j放到前面，因为短路求值就不会出现数组下标越界访问的情况了
            if(i <= j && nums[i] == val && nums[j] != val) {
                nums[i] = nums[j];
                i++;
                j--;
            }
        }
        return j + 1;
    }
}
